package com.jsmile.cloud.tradecenter.order.factory;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

import com.google.common.collect.Lists;
import com.jsmile.cloud.tradecenter.api.enums.OrderStatusEnum;
import com.jsmile.cloud.tradecenter.api.req.ReqOrderCreate;
import com.jsmile.cloud.tradecenter.api.req.SplitOrder;
import com.jsmile.cloud.tradecenter.order.model.Order;
import com.jsmile.mall.api.exception.ExceptionKit;

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class OrderCheckFactory {

    // 创建订单构建订单检测参数
    public static OrderCheckKit build(ReqOrderCreate reqOrderCreate) {
        Map<SplitOrder, List<ReqOrderCreate.OrderSku>> orderMap = reqOrderCreate.getSkuList().stream().collect(Collectors.groupingBy(ReqOrderCreate.OrderSku::getSplitOrder));
        OrderCheckKit orderCheckKit = OrderCheckKit.me(reqOrderCreate).checkGoods().checkMember().genOrderNos(orderMap.size());
        return orderCheckKit;
    }

    // 去支付时检查订单状态和活动状态
    public static OrderCheckKit build(List<Order> orders) {
        ReqOrderCreate reqOrderCreate = new ReqOrderCreate();
        List<ReqOrderCreate.OrderSku> skuList = Lists.newArrayList();
        orders.forEach(order -> {
            ExceptionKit.checkArgument(order.getOrderStatus() != OrderStatusEnum.TO_PAY.getValue(), "订单状态不是待付款!");
            order.getOrderProducts().forEach(product -> {
                ReqOrderCreate.OrderSku orderSku = new ReqOrderCreate.OrderSku();
                orderSku.setSkuId(product.getSkuId());
                orderSku.setSpuId(product.getSpuId());
                orderSku.setSkuNumber(product.getProductNumber());
                orderSku.setDeliveryType(order.getDeliveryType());
                orderSku.setActivityId(product.getActivityId());
                orderSku.setShopId(order.getShopId());
                orderSku.setSupplyId(order.getSupplyId());
                skuList.add(orderSku);
            });
        });
        reqOrderCreate.setSkuList(skuList);
        // 商品状态检查
        OrderCheckKit orderCheckKit = OrderCheckKit.me(reqOrderCreate).checkGoods();
        return orderCheckKit;
    }
}
